package com.example.BlockChain.entity;

import com.google.gson.Gson;

import java.io.Serializable;

/**
 * NoticeParams 类
 * 用于封装通知参数，例如区块链节点名称、IP 地址和交易名称。
 * - 通常用于业务逻辑中，作为数据传输对象在服务之间传递。
 * - 实现了 Serializable 接口，支持对象序列化，便于在网络中传输或存储。
 */
public class NoticeParams implements Serializable {

	/**
	 * 无参构造函数
	 * - 必须存在，用于框架反射实例化对象。
	 */
	public NoticeParams() {};

	/**
	 * 全参构造函数
	 * - 用于快速创建对象时设置参数值。
	 * @param bn 节点名称
	 * @param ip 节点 IP 地址
	 * @param tradeName 交易名称
	 */
	public NoticeParams(String bn, String ip, String tradeName) {
		super(); // 调用父类构造方法
		this.bn = bn;
		this.ip = ip;
		this.tradeName = tradeName;
	}

	/**
	 * bn：节点名称
	 * - 用于标识区块链网络中的某个节点。
	 */
	private String bn;

	/**
	 * ip：节点 IP 地址
	 * - 表示节点的网络地址，用于通信。
	 */
	private String ip;

	/**
	 * tradeName：交易名称
	 * - 表示当前交易的名称或标识。
	 */
	private String tradeName;

	// ================== Getter 和 Setter 方法 ==================

	/**
	 * 获取节点名称
	 * @return bn 节点名称
	 */
	public String getBn() {
		return bn;
	}

	/**
	 * 设置节点名称
	 * @param bn 节点名称
	 */
	public void setBn(String bn) {
		this.bn = bn;
	}

	/**
	 * 获取节点 IP 地址
	 * @return ip 节点 IP 地址
	 */
	public String getIp() {
		return ip;
	}

	/**
	 * 设置节点 IP 地址
	 * @param ip 节点 IP 地址
	 */
	public void setIp(String ip) {
		this.ip = ip;
	}

	/**
	 * 获取交易名称
	 * @return tradeName 交易名称
	 */
	public String getTradeName() {
		return tradeName;
	}

	/**
	 * 设置交易名称
	 * @param tradeName 交易名称
	 */
	public void setTradeName(String tradeName) {
		this.tradeName = tradeName;
	}

	/**
	 * 将 NoticeParams 对象转换为 JSON 字符串
	 * - 使用 Gson 库将对象序列化为 JSON 格式。
	 * @return JSON 格式的字符串
	 */
	public String toJSONString() {
		return new Gson().toJson(this);
	}
}
